2.两数相加分析题目比较简单,就是两个数相加求和。按照加法思想,同时遍历两个链表,从个位一直加到最高位即可。比如要计算352+99,步骤如下:最低位2+9得11,需进位,个位保留1,进位1先存储5+9得14,再加上刚刚的进位1,得到15,本位保留5,进位1先存储3+0(注意此时99的位数已经用完了,但是352还有一位,所以这里可以将99的这一位看作0)得3,再加上刚刚的进位1,得到4将前面几步中的数字按照顺序排列,可得到451。观察上述过程,一个容易出错的地方,在于加法进位的处理。另外一个难点,在于位数的处理,两个链表长度不一,结果链表的长度也只有把前面所有位数加完才确定。一种实现functi
1.两数之和方案一,暴力双循环读完题目,马上能想到的方案就是双循环,挨个排查,写出来也很快:vartwoSum=function(nums,target){constlen=nums.length;for(leti=0;i上面方案,最大的问题就是时间复杂度为O(n^2),所以我们可以想办法在此基础上优化。方案二,空间换时间(Map)方案一的思路是,从头到尾挨个去计算数组中任意两个元素的和,然后与给定结果值进行比较,从而找到目标索引,这就导致必须得进行O(n^2)复杂度的双循环,效率低下。为了干掉双循环,我们不得不转换思考方式,如何才能在一次迭代中就实现题目要求呢。题目本质是找到符合要求的两个数
2.两数相加分析题目比较简单,就是两个数相加求和。按照加法思想,同时遍历两个链表,从个位一直加到最高位即可。比如要计算352+99,步骤如下:最低位2+9得11,需进位,个位保留1,进位1先存储5+9得14,再加上刚刚的进位1,得到15,本位保留5,进位1先存储3+0(注意此时99的位数已经用完了,但是352还有一位,所以这里可以将99的这一位看作0)得3,再加上刚刚的进位1,得到4将前面几步中的数字按照顺序排列,可得到451。观察上述过程,一个容易出错的地方,在于加法进位的处理。另外一个难点,在于位数的处理,两个链表长度不一,结果链表的长度也只有把前面所有位数加完才确定。一种实现functi
1.两数之和方案一,暴力双循环读完题目,马上能想到的方案就是双循环,挨个排查,写出来也很快:vartwoSum=function(nums,target){constlen=nums.length;for(leti=0;i上面方案,最大的问题就是时间复杂度为O(n^2),所以我们可以想办法在此基础上优化。方案二,空间换时间(Map)方案一的思路是,从头到尾挨个去计算数组中任意两个元素的和,然后与给定结果值进行比较,从而找到目标索引,这就导致必须得进行O(n^2)复杂度的双循环,效率低下。为了干掉双循环,我们不得不转换思考方式,如何才能在一次迭代中就实现题目要求呢。题目本质是找到符合要求的两个数
3.无重复字符的最长字串0、分析简单分析一下:要求无重复字符的最长子串的长度。长度值可以用一个变量保存,至于最大长度,只需要在每轮循环中对长度变量值与当前无重复字符的子串长度求最大值即可,那么问题就转变成了如何在循环中找出所有无重复字符的子串。为便于叙述,下文使用s表示原字符串,bs表示子串,ndcs表示无重复字符的子串,lndcs表示最长的无重复字符的子串1、暴力双循环基于以上分析,可以用双循环暴力去解决,下面是一种实现?:functionlengthOfLongestSubstring(s){constn=s.lengthletans=0for(leti=0;i本解法好处是粗暴直观,坏处就
3.无重复字符的最长字串0、分析简单分析一下:要求无重复字符的最长子串的长度。长度值可以用一个变量保存,至于最大长度,只需要在每轮循环中对长度变量值与当前无重复字符的子串长度求最大值即可,那么问题就转变成了如何在循环中找出所有无重复字符的子串。为便于叙述,下文使用s表示原字符串,bs表示子串,ndcs表示无重复字符的子串,lndcs表示最长的无重复字符的子串1、暴力双循环基于以上分析,可以用双循环暴力去解决,下面是一种实现?:functionlengthOfLongestSubstring(s){constn=s.lengthletans=0for(leti=0;i本解法好处是粗暴直观,坏处就
题目来源45.跳跃游戏II题目详情给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums[i+j]处:0i+j返回到达 nums[n-1]的最小跳跃次数。生成的测试用例可以到达nums[n-1]。示例1:输入:nums=[2,3,1,1,4]输出:2解释:跳到最后一个位置的最小跳跃数是2。 从下标为0跳到下标为1的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例2:输入:nums=[2,3,0,1,4]输出:2提示:10题目保证可以到达 nums[n-1]
题目来源45.跳跃游戏II题目详情给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums[i+j]处:0i+j返回到达 nums[n-1]的最小跳跃次数。生成的测试用例可以到达nums[n-1]。示例1:输入:nums=[2,3,1,1,4]输出:2解释:跳到最后一个位置的最小跳跃数是2。 从下标为0跳到下标为1的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例2:输入:nums=[2,3,0,1,4]输出:2提示:10题目保证可以到达 nums[n-1]
柱状图中最大的矩形原题:84.LargestRectangleinHistogram题目描述:给定\(n\)个非负整数,用来表示柱状图中每个柱子的高度。每个柱子相邻且宽度为1。求这个柱状图中能容纳的最大矩形的面积。思路:对于一个柱状图中的最大矩形,我们可以观察出如下性质:矩形的高必等于某个柱子的高度,也就是矩形的上边与某个柱子的上边在同一条直线上。证明:假设上述不成立。那对于每个柱子,它们的高都比这个最大矩形的高至少大1。因此我们可以增加这个矩形的高,得到一个更大的矩形,并且这个矩形还在柱状图中。因此这个矩形不是最大的矩形,得出悖论。因此此条性质成立。矩形的左边柱子的高度小于矩形高度,矩形的右
柱状图中最大的矩形原题:84.LargestRectangleinHistogram题目描述:给定\(n\)个非负整数,用来表示柱状图中每个柱子的高度。每个柱子相邻且宽度为1。求这个柱状图中能容纳的最大矩形的面积。思路:对于一个柱状图中的最大矩形,我们可以观察出如下性质:矩形的高必等于某个柱子的高度,也就是矩形的上边与某个柱子的上边在同一条直线上。证明:假设上述不成立。那对于每个柱子,它们的高都比这个最大矩形的高至少大1。因此我们可以增加这个矩形的高,得到一个更大的矩形,并且这个矩形还在柱状图中。因此这个矩形不是最大的矩形,得出悖论。因此此条性质成立。矩形的左边柱子的高度小于矩形高度,矩形的右